import com.sun.org.apache.xml.internal.utils.SystemIDResolver;

import java.util.Scanner;

public class Test {
    public static void main1(String[] args) {
        String str=new String("hello1");
        String str1="hello2";
        char[] value={'a','b','l','l'};
        String str3=new String(value);//数组转字符串
        System.out.println(str3);
        System.out.println(str3.isEmpty());//判断字符串是否为空
        System.out.println(str.equals(str1));//判断str字符串是否等于str1字符串
    }

    public static void main2(String[] args) {
         String str1=new String("prokect");
         String str2=new String("Prokectasdad");
        System.out.println(str1.compareTo(str2));//按照字典序比较,大于返回正数,小于返回负数
        System.out.println(str1.compareToIgnoreCase(str2));//忽略大小写比较长度
        System.out.println(str1.charAt(0));//拿到下标为0的字符
        int ch=str2.indexOf('a');//返回第一次出现a的字符下标
        System.out.println(str2.indexOf('a',2));//从2下标开始搜索字符a，返回下标
        System.out.println(str2.indexOf("kect"));//在主串中查找子串返回k的下标
        System.out.println(str2.lastIndexOf('s'));//从后往前搜索字符s
    }
    //字符与数值之间的转换
    public static void main3(String[] args) {
        String str1=String.valueOf(123);//将整型转变为字符串
        String str2=String.valueOf(12.122);//浮点数转变字符
        System.out.println("_______________");
        String str3="1999";
        //字符转数字
        int data=Integer.parseInt(str3);
        System.out.println(data);
        //变大写
        String str4=new String("alert");
        System.out.println(str4.toUpperCase());
        //变小写
        String str5="MAINtain";
        System.out.println(str5.toLowerCase());
        //字符串转数组
        char[] array=str5.toCharArray();
        //替换字符
        String str6=new String("QuesTion");
        String ret=str6.replace('Q','R');
        //在字符中用R替换q,区分大小写
        System.out.println(ret);
        //替换子串
        String str7=new String("Commitment");
        String ret2=str7.replace("Com","Cat");
        System.out.println(ret2);
    }
    //字符串分割
    public static void main4(String[] args) {
        String str="He is vigorously";
        String[] ret=str.split(" ",2);//以空格为分隔符
        // 将字符串分割成2个字符串,用字符串数组接收
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }
        String str1="192.168.0.1";
        String[] ret2=str1.split("\\.",4);//需要用转义字符
        for (int i = 0; i < ret2.length; i++) {
            System.out.println(ret2[i]);
        }
    }
    //字符串截取
    public static void main5(String[] args) {
        String str="abcdefg982";
        //返回从2位置开始截取的所有字符
        String s=str.substring(2);
        System.out.println(s);
        //截取从下标2开始到下标6的字符串,左闭右开
        String s1=str.substring(2,6);//[2,6)
        System.out.println(s1);
    }

    public static void main(String[] args) {
        //没有新创建对象时，双引号引起来的值直接存放在字符串常量池（哈希表）中
        String str1="abcd";
        String str2="abcd";
        System.out.println(str1==str2 );//比较时两个字符串在字符串常量池搜寻，结果返回true

        String str3="hello";
        //新创建一个对象,再把这个对象指向字符串常量池
        String str4=new String("hello");
        System.out.println(str3==str4);//结果返回false
    }
    //字符串拼接
    public static void main7(String[] args) {
        String str=new String("abcdef");
        str +="ghf";
        System.out.println(str);
    }
    //StringBuilder和StringBuffer
    public static void main9(String[] args) {
        //都在同一个对象修改
        //StringBuffer和StringBuilder是可变的
        StringBuilder stringBuilder=new StringBuilder("abc");
        System.out.println(stringBuilder);
        //逆置字符串
        stringBuilder.reverse();
        System.out.println(stringBuilder);
        //添加字符
        stringBuilder.append("123").append(99);
        stringBuilder.append("19.9");
        System.out.println(stringBuilder);//输出结果1239919.9，为字符串
        //String变为StringBuilder
        String ret=stringBuilder.toString();//使用toString方法转变

    }
    public int firstUniqChar(String s) {
        //小写字母ASCII值从97开始,26个字母长度为123
        int[] count=new int[125];
        //字符的ASCII值对应数组下标
        for (int i = 0; i < s.length(); i++) {
            char ch=s.charAt(i);//获取字符串s的每个元素
            count[ch]++;//遇见一次字母，字符的ASCII值++
        }
        //再次遍历，返回下标（索引）
        for (int i = 0; i < s.length(); i++) {
            //s字符串从下标0开始遍历
            char ch=s.charAt(i);
            if (count[ch]==1){//count数组亦从字母的ASCII开始遍历
                return i;//返回索引
            }
        }
        //运行到此处说明没有进入if循环
        return -1;
    }
    //优化数组空间
    public int firstUniqChar2(String s) {
        //小写字母ASCII值从97开始,26个字母长度为123
        int[] count=new int[26];
        //字符的ASCII值对应数组下标
        for (int i = 0; i < s.length(); i++) {
            char ch=s.charAt(i);//获取字符串s的每个元素
            count[ch-'a']++;//字符的ASCII值++
        }
        //再次遍历，返回下标（索引）
        for (int i = 0; i < s.length(); i++) {
            //s字符串从下标0开始遍历
            char ch=s.charAt(i);
            if (count[ch-'a']==1){//count数组亦从字母的ASCII-'a'开始遍历
                return i;//返回索引
            }
        }
        //运行到此处说明没有进入if循环
        return -1;
    }
    //求最后一个单词的长度
    //法一,使用库函数
    public static int pursuitLen(){
        Scanner in=new Scanner(System.in);
        while(in.hasNextLine()){
            String str=in.nextLine();
            int index=str.lastIndexOf(' ');//获取最后一个空格的下标
            String ret=str.substring(index+1);
            System.out.println(ret.length());
            return ret.length();
        }
        return -1;
    }
    //判断是否回文字符
    public boolean isPalindrome(String s) {
        s.toLowerCase();//全变小写
        int left=0;
        int right=s.length()-1;
        while(left<right){
            //不是字符就进入该循环
            while (left<right&&!isvalue(s.charAt(left))){
                left++;
            }
            //left为有效字符
            while(left<right&&!isvalue(s.charAt(right))){
                right--;
            }
            //right为有效字符
            if (s.charAt(left)!=s.charAt(right)){//不相等返回false
                return false;
            }else {//相等左下标和右下标移动
                left++;
                right--;
            }
        }
        //循环走完不进false，则返回true
        return true;
    }
    public boolean isvalue(char ch){
        //Character.isDigit(ch);//确认字符是否是数字
        //Character.isLetter(ch);//确认字符是否是字母,是结果返回true
        /*if (ch>='0'&&ch<='9'||ch>='a'&&ch<='z'){
            return true;
        }
        //不是字符返回false
        return false;*/
        return Character.isLetter(ch)||Character.isDigit(ch);
    }


}
